Apache CXF একটি শক্তিশালী ওয়েব সার্ভিস ফ্রেমওয়ার্ক যা SOAP এবং RESTful ওয়েব সার্ভিস তৈরি এবং পরিচালনার জন্য ব্যবহৃত হয়। এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল এর লোগিং ফিচার, যা ওয়েব সার্ভিসের মেসেজ এবং প্রসেসিং সম্পর্কিত তথ্য লগ করার সুবিধা দেয়। এই লোগিং কনফিগারেশন আপনাকে ওয়েব সার্ভিসের কার্যকারিতা ট্র্যাক করতে, ডিবাগ করতে এবং সমস্যা চিহ্নিত করতে সাহায্য করে।
CXF মেসেজ লোগিং কনফিগারেশনে SOAP রিকোয়েস্ট এবং রেসপন্স, HTTP হেডার এবং অন্যান্য গুরুত্বপূর্ণ মেটাডেটা অন্তর্ভুক্ত হতে পারে। এখানে, আমরা দেখব কিভাবে Apache CXF এর মাধ্যমে লগিং কনফিগার করা যায়।
প্রথমে, আপনাকে Apache CXF এর লোগিং ফিচার ব্যবহারের জন্য প্রয়োজনীয় Maven ডিপেনডেন্সি যোগ করতে হবে। এই ডিপেনডেন্সি লোগিং সম্পর্কিত ক্লাস এবং ফিল্টার সরবরাহ করবে।
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-logging</artifactId>
<version>3.5.0</version>
</dependency>
Apache CXF এর লগিং কনফিগারেশন করার জন্য, আপনাকে org.apache.cxf.transport.common.gzip.GZIPInInterceptor
এবং org.apache.cxf.transport.common.gzip.GZIPOutInterceptor
এর মতো ফিল্টার ব্যবহার করতে হবে। তবে এর জন্য CXF Logging Interceptor ব্যবহার করা হয়, যা SOAP মেসেজের কনটেন্ট এবং অন্যান্য তথ্য লগ করতে সহায়তা করে।
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.Bus;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CxfConfig {
@Bean
public JaxWsServerFactoryBean jaxWsServerFactoryBean() {
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setServiceClass(HelloWorldService.class);
factoryBean.setAddress("/ws/helloWorld");
// Logging Interceptors
factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
return factoryBean;
}
@Bean
public CXFServlet cxfServlet() {
return new CXFServlet();
}
}
এখানে, LoggingInInterceptor এবং LoggingOutInterceptor ইন্টারসেপ্টর ব্যবহার করা হয়েছে, যা ইনকামিং এবং আউটগোইং SOAP মেসেজের লগ করবে।
CXF এর লগিং কনফিগারেশনে আপনি লগের স্তর (log level) নির্ধারণ করতে পারেন। লগ স্তর নির্ধারণ করতে আপনাকে সাধারণত log4j
বা slf4j
কনফিগারেশন ফাইল ব্যবহার করতে হবে। নিচে log4j.properties
ফাইলে কিভাবে লগ স্তর কনফিগার করা যায় তা দেখানো হল:
log4j.rootLogger=DEBUG, stdout
# Console logging configuration
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c: %m%n
# CXF specific logging
log4j.logger.org.apache.cxf=DEBUG
log4j.logger.org.apache.cxf.services=DEBUG
log4j.logger.org.apache.cxf.transport.http=DEBUG
এখানে, log4j.logger.org.apache.cxf
লগ স্তরকে DEBUG
সেট করা হয়েছে, যা বিস্তারিত লগিং করবে। এটি SOAP মেসেজের মধ্যে পাঠানো ডেটা, প্রাপ্ত ডেটা এবং অন্যান্য তথ্য ধারণ করবে।
আপনি যদি মেসেজের পে-লোড (payload) লগ করতে চান, তবে আপনাকে LoggingInInterceptor এবং LoggingOutInterceptor এর কনফিগারেশনে কিছু অতিরিক্ত প্রপার্টি সেট করতে হবে, যেমন:
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class CxfConfig {
@Bean
public JaxWsServerFactoryBean jaxWsServerFactoryBean() {
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setServiceClass(HelloWorldService.class);
factoryBean.setAddress("/ws/helloWorld");
// Configuring logging to log message payloads
LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
loggingInInterceptor.setPrettyLogging(true); // Pretty print for request message
factoryBean.getInInterceptors().add(loggingInInterceptor);
LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
loggingOutInterceptor.setPrettyLogging(true); // Pretty print for response message
factoryBean.getOutInterceptors().add(loggingOutInterceptor);
return factoryBean;
}
}
এখানে, setPrettyLogging(true)
প্যারামিটার ব্যবহার করে মেসেজের পাঠানো এবং প্রাপ্ত ডেটার প্রিন্ট আউটকে সুন্দরভাবে দেখতে পারবেন, যা ডিবাগিং এবং টেস্টিংয়ের জন্য উপকারী।
CXF ওয়েব সার্ভিসে কোনো এক্সসেপশন ঘটলে সেটিও লগ করা উচিত। এর জন্য আপনাকে Fault Interceptor ব্যবহার করতে হবে। নিম্নলিখিত কোডে এটি কিভাবে কনফিগার করা যাবে তা দেখানো হল:
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
public class LoggingFaultInterceptor extends LoggingInInterceptor {
@Override
public void handleMessage(org.apache.cxf.message.Message message) throws Fault {
try {
super.handleMessage(message); // Standard logging
} catch (Fault fault) {
// Log the exception
System.out.println("Logging Exception: " + fault.getMessage());
throw fault;
}
}
}
এটি যদি কোনো Fault বা এক্সসেপশন হয়, তবে সেটি কনসোলে লগ করবে এবং অ্যাপ্লিকেশনের অন্যান্য অংশে তথ্য পাস করবে।
Apache CXF এর লগিং কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি আপনাকে SOAP এবং RESTful ওয়েব সার্ভিসের কার্যকারিতা ট্র্যাক করতে এবং সহজে ডিবাগ করতে সহায়তা করে। LoggingInInterceptor
এবং LoggingOutInterceptor
এর মাধ্যমে আপনি ইনকামিং এবং আউটগোইং SOAP মেসেজের কনটেন্ট লগ করতে পারেন, এবং log4j বা slf4j এর মাধ্যমে লগ স্তর কনফিগার করে মেসেজের বিস্তারিত আউটপুট পেতে পারেন।